package com.kamistoat.meimeistore.commoncore.utils;

import org.apache.commons.lang3.exception.ExceptionUtils;

import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * 错误信息处理类
 * 用到这个类一般都是在 cache代码块中，对 cache 到的异常进行自定义处理
 * 所有方法均static，直接用元类.方法名调用
 */
public class ExceptionUtil {
    /**
     * 获取Exception.printStackTrace 的内容，并将其以String的形式返回。
     * 不再是仅仅在控制台打印。
     *
     * @param throwable 异常
     * @return 自定义String内容
     */
    public static String getExceptionMessage(Throwable throwable) {
        StringWriter stringWriter = new StringWriter();
        throwable.printStackTrace(new PrintWriter(stringWriter, true));
        return stringWriter.toString();
    }

    /**
     * 获取最底层的错误cause
     *
     * @param exception 异常
     * @return 自定义String内容
     */
    public static String getRootErrorMessage(Exception exception) {
        // 使用 lang3中的 ExceptionUtils类
        Throwable root = ExceptionUtils.getRootCause(exception);
        root = (root == null ? exception : root);

        if(root == null){
            return StringUtils.EMPTY;
        }

        String msg = root.getMessage();
        if(msg == null){
            return "null";
        }

        return StringUtils.defaultString(msg);
    }
}
